/**
 * 成绩统计
 */
// 使用箭头函数定义计算成绩统计的主要函数
const calculateGradeStats = (students) => {
    // 1. 使用解构赋值和箭头函数从数组中提取出所有分数
    const scores = students.map(({ score }) => score);

    // 2. 计算平均分 (使用箭头函数和reduce)
    const average = scores.reduce((sum, currentScore) => sum + currentScore, 0) / scores.length;

    // 3. 计算最高分 (使用扩展运算符解构数组到Math.max的参数中)
    const max = Math.max(...scores);

    // 4. 计算最低分 (使用扩展运算符解构数组到Math.min的参数中)
    const min = Math.min(...scores);

    // 5. 计算优秀人数 (使用箭头函数和filter)
    const excellentCount = students.filter(({ score }) => score >= 90).length;

    // 6. 返回统计结果对象
    return {
        average: Number(average.toFixed(2)), // 保留两位小数
        max,
        min,
        excellentCount
    };
};

// 使用箭头函数定义格式化输出的函数，使用模板字符串
const formatStatsReport = ({ average, max, min, excellentCount }) => {
    // 使用模板字符串嵌入表达式和变量
    return `
======== 成绩统计报告 ========
平均分: ${average}
最高分: ${max}
最低分: ${min}
优秀人数: ${excellentCount}
================================
`;
};

// 示例数据
const studentScores = [
    { name: "Alice", score: 95 },
    { name: "Bob", score: 88 },
    { name: "Charlie", score: 76 },
    { name: "David", score: 92 },
    { name: "Eva", score: 84 }
];

// 调用函数计算统计数据
const stats = calculateGradeStats(studentScores);

// 调用函数格式化并打印结果
console.log(formatStatsReport(stats));